﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Web;
using System.Web.SessionState;
using Enums;
using Vallejos.Entidades.ModeloDeDatos;
using Vallejos.Negocio;
using System.Linq;

public class ImageHandler : IHttpHandler, IRequiresSessionState
{
    public void ProcessRequest(HttpContext context)
    {
        context.Response.Clear();

        if (!String.IsNullOrEmpty(context.Request.QueryString["id"]) || !String.IsNullOrEmpty(context.Request.QueryString["idProducto"]))
        {
            Producto producto = null;
            Imagen imagen = null;

            if(context.Request.QueryString["id"] != null)
            {
                var negocio = (NegocioFacade)context.Session[VariablesDeSesion.NegocioFacade.ToString()];
                var idImagen = Int32.Parse(context.Request.QueryString["id"]);
                producto = negocio.RecuperarEntidadEnEdicion<Producto>() ?? new Producto();
                imagen = producto.Imagenes.Find(img => img.Id == idImagen);
            }
            else
            {
                var idProducto = Int32.Parse(context.Request.QueryString["idProducto"]);
                var productos = (List<Producto>) context.Session[VariablesDeSesion.ProductosEnCache.ToString()];
                producto = productos.Single(prod => prod.Id == idProducto);

                if (producto.Imagenes != null && producto.Imagenes.Count > 0)
                    imagen = producto.Imagenes.First();
            }

            Image image = null;

            if(imagen != null)
            {
                image = Image.FromStream(new MemoryStream(imagen.Stream));

                context.Response.ContentType = imagen.Contenido;
                
                image.Save(context.Response.OutputStream, ImageFormat.Jpeg);
            }
            else
            {
                var serverPath = context.Session[VariablesDeSesion.ServerPath.ToString()];
                image = Image.FromFile(String.Format(@"{0}\img\cocheBlanco.png",serverPath));
                image.Save(context.Response.OutputStream, ImageFormat.Jpeg);
            }
        }
        else
        {
            context.Response.ContentType = "text/html";
            context.Response.Write("<p>Imagen Invalida</p>");
        }
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}